export {};
// 类型、约束
type Obj = {
  name: string;
  age: number;
  score: number;
};

type Key = 'name' | 'age'; // 过时了，我要动态计算

// 定义函数, K 这个类型，动态从 T 中计算得来
// const getProp = <T extends Obj, K extends keyof T>(obj: T, key: K): T[K] => {
//   // 返回值
//   return obj[key];
// };

// 升级：getProp 函数的第一个参数，只要求，是一个对象即可。
// 定义一个函数，获取输入对象指定key的值
const getProp = <T extends object, K extends keyof T>(obj: T, key: K): T[K] => {
  // 返回值
  return obj[key];
};

console.log(getProp({ a: 1, b: 'b' }, 'a'));

console.log(getProp({ name: 'Jack', age: 18, score: 100 }, 'score'));
console.log(getProp({ name: 'Rose', age: 18, score: 90 }, 'age'));
